mybatis migration

mybatis migration

mybatis migration(MM)的目的也是对数据库升级进行管理, 它的命令主要包括:

  • init: 初始化项目目录,运行完这条命令后,MM会在指定的目录下生成项目所需要的目录结构,包括

    • drivers: 用于存放数据库驱动

    • environments: 环境变量参数,默认有development.properties,代表开发环境,可以通过这里设置多个环境

    • scripts: 这里就是存储sql脚本的地方, 通过new命令会自动在这里生成以时间戳为前缀的脚本文件,每个文件分为两个区域,一个是升级脚本,一个是回退脚本.

  • bootstrap: 初始化脚本,当需要对一个已经存在数据和结构的DB引入MM时,这里就存放着初始化的数据

  • new: 创建一个新的sql升级脚本. 它会自动在scripts目录下生成一个以时间戳为前缀的sql文件

  • status: 查看当前scripts目录下所有脚本的情况, 当脚本没有被执行时,状态栏会显示pending, 否则会显示执行的时间

  • up/down/version: 这三个命令分别代表升级、降级以及恢复到指定版本

    • up默认升级到最新的版本,但可以通过参数指定升级的版本个数

    • down默认只回退一个版本,但可以通过参数指定回退的版本个数

    • version后面跟具体的版本号, 表示需要回退到这个版本

  • pending: 在多人合作的场景中,可能会出现这样一个情况:

    A生成了sqlA脚本,B生成了sqlB脚本,sqlA的时间早于sqlB, 但提交时间晚于sqlB, 于是sqlB已经被执行了,但sqlA还处于pending状态,如下所示:

这时候有两种方案可以解决这个问题:

  1. 先降级,再升级: 这也是推荐的方式
  2. 直接使用pending: 这个命令是强制执行某个脚本,适合于这个升级脚本相对独立的情况
  • script: 这个命令有两个参数,一个是起始版本,一个是终止版本,输出一个delta脚本,这个脚本的作用是将数据库从起始版本变更到终止版本

    • 如果起始版本低于终止版本,那么生成的delta脚本就是个升级脚本

    • 如果起始版本高于终止版本,那么生成的delta脚本就是个降级脚本.

您的支持将鼓励我继续创作!